<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

include 'career.php';

/**
 * Description of CevCapacitaciones
 *
 * @author ETorres
 */
class CevCapacitaciones extends ModuleModel {
    const dias = "acaweb_cev_dias_capacitaciones";
    const jornadas = "acaweb_cev_jornadas_capacitaciones";
    const capacitaciones = "acaweb_cev_capacitaciones";
    const itinerarios = "acaweb_cev_itinerario_capacitaciones";
    const interesados = "acaweb_cev_interesados";

    /**
     *
     * @var Query
     */
    private $query;

    function __construct() {
        parent::__construct();
        $this->query = ModulesContext::instance()->getQueryFactory()->getQuery();
    }
//
//    function crear($datos) {
//        return $this->query->insertInto(self::tabla)
//                        ->set("docente", $datos["docente"])
//                        ->set("email", $datos["email"])
//                        ->set("codigoCurso", $datos["codigoCurso"])
//                        ->set("nombreCurso", $datos["nombreCurso"])
//                        ->set("resumenCurso", $datos["resumenCurso"])
//                        ->set("idPrograma", $datos["idPrograma"])
//                        ->set("estado", "1")
//                        ->set("fechaCreacion", date("d/m/Y"))
//                        ->commit(true);
//    }
//
//    function getAll() {
//        $result = $this->query->select()
//                ->from(array(self::tabla))
//                ->where("estado", '1')
//                ->orWhere("estado", '2')
//                ->get();
//
//        return $result->resultList();
//    }
//
//    function GetById($id) {
//        $result = $this->query->select()
//                ->from(array(self::tabla))
//                ->where("id", $id)
//                ->get();
//
//        return $result->firstRow();
//    }
//    
//    function delete($id) {
//        $result = $this->query->update(self::tabla)
//                ->where("id", $id)
//                ->set("estado", "3")
//                ->commit();
//
//        return $result;
//    }
    
    function getDias() {
        $result = $this->query->select()
                ->from(array(self::dias))
                ->get();

        return $result->resultList();
    }
    
    function getJornadas() {
        $result = $this->query->select()
                ->from(array(self::jornadas))
                ->get();

        return $result->resultList();
    }
    
    function getCapacitaciones() {
        $result = $this->query->select()
                ->from(array(self::capacitaciones))
                ->get();

        return $result->resultList();
    }
    
    function getInteresados() {
        $result = $this->query->select()
                ->from(array(self::interesados))
                ->get();

        return $result->resultList();
    }
    
    function getDiaById($id) {
            $result = $this->query->select()
                ->from(array(self::dias))
                ->where("id", $id)
                ->get();
            
        return $result->firstRow();
    }
    
    function getJornadaById($id) {
        $result = $this->query->select()
                ->from(array(self::jornadas))
                ->where("id", $id)
                ->get();

        return $result->firstRow();
    }
    
    function getJornadaByNombre($nombre) {
        $result = $this->query->select()
                ->from(array(self::jornadas))
                ->where("nombre", $nombre)
                ->get();

        return $result->firstRow();
    }
    
    function getDiaByNombre($nombre) {
        $result = $this->query->select()
                ->from(array(self::dias))
                ->where("nombre", $nombre)
                ->get();

        return $result->firstRow();
    }
    
    function getCapacitacionById($id) {
        $result = $this->query->select()
                ->from(array(self::capacitaciones))
                ->where("id", $id)
                ->get();

        return $result->firstRow();
    }
    
    function getInteresadoById($id) {
        $result = $this->query->select()
                ->from(array(self::interesados))
                ->where("id", $id)
                ->get();

        return $result->firstRow();
    }
    
    function getItinerarioById($id) {
        $result = $this->query->select()
                ->from(array(self::itinerarios))
                ->where("id", $id)
                ->get();

        return $result->firstRow();
    }
    
    function crearCapacitacion($capacitacion) {
        
        $itinerario = $capacitacion['itinerario'];
        
        $capacitacion = $this->query->insertInto(self::capacitaciones)
                            ->set("nombre", $capacitacion["nombre"])
                            ->set("descripcion", $capacitacion["descripcion"])
                            ->set("capacidad", $capacitacion["capacidad"])
                            ->commit(true);
        
        foreach ($itinerario as $item) {
            $dia = $this->getDiaByNombre($item['dia']);
            $jornada = $this->getJornadaByNombre($item['jornada']);
            if (empty($dia)){
                $dia = $this->query->insertInto(self::dias)
                    ->set('nombre', $item["dia"])
                    ->commit(true);
            } else {
                $dia = $dia['id'];
            }
            
            if (empty($jornada)){
                $jornada = $this->query->insertInto(self::jornadas)
                        ->set('nombre', $item['jornada'])
                        ->commit(true);
            } else {
                $jornada = $jornada['id'];
            }
            
            
            $this->query->insertInto(self::itinerarios)
                ->set("id_capacitacion", $capacitacion)
                ->set("id_dia", $dia)
                ->set("id_jornada", $jornada)
                ->commit();
        }
    }
    
    function crearInscripcion($inscripcion) {
        return $this->query->insertInto(self::interesados)
            ->set("tipoInteresado", $inscripcion['tipoInteresado'])
            ->set("nombre", $inscripcion['nombre'])
            ->set("email", $inscripcion["email"])
            ->set("id_programa", $inscripcion["idPrograma"])
            ->set("id_itinerario", $inscripcion["idItinerario"])
            ->commit(true);
    }
    
    function getCapacitacionesDisponibles() {

        $capacitaciones = $this->getCapacitaciones();
        
        $capacitacionesDisponibles = array();
        
        foreach ($capacitaciones as $capacitacion) {
            
            $capacidad = $capacitacion['capacidad'];
            
            $itinerarios = $this->getItinerariosByIdCapacitacion($capacitacion['id']);
            
            foreach ($itinerarios as $itinerario) {
                
                $interesados = $this->getInteresadosByIdItinerario($itinerario['id']);
                
                 if(count($interesados) < $capacidad){
                     $capacitacionDisponible = $this->getCapacitacionById($itinerario['id_capacitacion']);
                     if ($capacitacionDisponible['enabled'] == 1){
                         if(!in_array($capacitacionDisponible, $capacitacionesDisponibles)){
                            array_push($capacitacionesDisponibles, $capacitacionDisponible);
                        }
                     }
                 }
            }
            
        }
        return $capacitacionesDisponibles;
    }
    
    function getDiasDisponibles($idCapacitacion){
        
        $capacitacion = $this->getCapacitacionById($idCapacitacion);
        
        $capacidad = $capacitacion['capacidad'];
        
        $itinerarios = $this->getItinerariosByIdCapacitacion($idCapacitacion);
        
        $diasDisponibles = array();
        
        foreach ($itinerarios as $itinerario) {
            
            $interesados = $this->getInteresadosByIdItinerario($itinerario['id']);
            
            if(count($interesados) < $capacidad){
                $diaDisponible = $this->getDiaById($itinerario['id_dia']);

                if ($diaDisponible['enabled'] == 1){
                    if(!in_array($diaDisponible, $diasDisponibles)){
                        array_push($diasDisponibles, $diaDisponible);
                    }
                }
            }
        }
        return $diasDisponibles;
    }
    
    function getJornadasDisponibles($idCapacitacion, $idDia){
        
        $capacitacion = $this->getCapacitacionById($idCapacitacion);
        
        $capacidad = $capacitacion['capacidad'];
        
        $itinerarios = $this->getItinerariosByIdCapacitacionAndIdDia($idCapacitacion, $idDia);
        
        $jornadasDisponibles = array();
        
        foreach ($itinerarios as $itinerario) {
            
            $interesados = $this->getInteresadosByIdItinerario($itinerario['id']);
            
            if(count($interesados) < $capacidad){
                $jornadaDisponible = $this->getJornadaById($itinerario['id_jornada']);

                if(!in_array($jornadaDisponible, $jornadasDisponibles)){
                    $jornadaDisponible['id'] = $itinerario['id'];
                    array_push($jornadasDisponibles, $jornadaDisponible);
                }
            }
        }
        return $jornadasDisponibles;
    }
    
    function getInteresadosByIdItinerario($idItinerario) {
        $result = $this->query->select()
                ->from(array(self::interesados))
                ->where("id_itinerario", $idItinerario)
                ->get();
        
        return $result->resultList();
    }
    
    function getItinerariosByIdCapacitacion($idCapacitacion) {
        $result = $this->query->select()
                    ->from(array(self::itinerarios))
                    ->where("id_capacitacion", $idCapacitacion)
                    ->orderBy('id')
                    ->get();
        

        return $result->resultList();
    }
    
    function getItinerariosByIdCapacitacionAndIdDia($idCapacitacion, $idDia) {
        $result = $this->query->select()
                    ->from(array(self::itinerarios))
                    ->where("id_capacitacion", $idCapacitacion)
                    ->where("id_dia", $idDia)
                    ->orderBy('id')
                    ->get();

        return $result->resultList();
    }
    
    function getInteresadosByIdCapacitacion($idCapacitacion) {
        $itinerarios = $this->getItinerariosByIdCapacitacion($idCapacitacion);
        
        $totalInteresados = array();
        
        foreach ($itinerarios as $itinerario){
            $interesados = $this->getInteresadosByIdItinerario($itinerario['id']);
            foreach ($interesados as $interesado) {
                
                $tempDia = $this->getDiaById($itinerario['id_dia']);
                $tempJornada = $this->getJornadaById($itinerario['id_jornada']);                
                $tempItinerario = array('dia' => $tempDia['nombre'], 'jornada' => $tempJornada['nombre']);
                
                $interesado['itinerario'] = $tempItinerario;
                if($interesado['tipoInteresado'] != 3) {
                    $interesado['nombrePrograma'] = career::GetById($interesado["id_programa"])->getNombrePlan();
                } else {
                    $interesado['nombrePrograma'] = '-';
                }
                array_push($totalInteresados, $interesado);
            }
        }
        
        return $totalInteresados;
    }
    
    function getFullCapacitaciones() {
        $capacitaciones = $this->getCapacitaciones();
        
        $totalCapacitaciones = array();
        foreach ($capacitaciones as $capacitacion) {
            $numeroInteresados = count($this->getInteresadosByIdCapacitacion($capacitacion['id']));
            $numeroItinerarios = count($this->getItinerariosByIdCapacitacion($capacitacion['id']));
            
            $capacitacion['numeroItinerarios'] = $numeroItinerarios;
            $capacitacion['numeroInteresados'] = $numeroInteresados;
            
            array_push($totalCapacitaciones, $capacitacion);
        }
        return $totalCapacitaciones;
    }
    
    function eliminarCapacitacionById($idCapacitacion){
        $itinerarios = $this->getItinerariosByIdCapacitacion($idCapacitacion);
        
        foreach ($itinerarios as $itinerario) {
            $this->eliminarInteresadosByIdItinerario($itinerario['id']);
        }
        
        $this->eliminarIntinerariosByIdCapacitacion($idCapacitacion);
        
        $this->query->delete(self::capacitaciones)
                ->where("id", $idCapacitacion)
                ->commit();
    }
    
    function eliminarInteresadosByIdItinerario($idItinerario) {
        $this->query->delete(self::interesados)
                ->where("id_itinerario", $idItinerario)
                ->commit();   
    }
    
    function eliminarIntinerariosByIdCapacitacion($idCapacitacion) {
        $this->query->delete(self::itinerarios)
                ->where("id_capacitacion", $idCapacitacion)
                ->commit();   
    }
    
    function eliminarInteresadoById($idInteresado) {
        $this->query->delete(self::interesados)
                ->where("id", $idInteresado)
                ->commit();
    }
    
    function eliminarItinerarioById($idItinerario) {
        $this->eliminarInteresadosByIdItinerario($idItinerario);
        
        $this->query->delete(self::itinerarios)
                ->where("id", $idItinerario)
                ->commit();
    }
    
    function getFullItinerariosByIdCapacitacion($idCapacitacion) {
        $itinerarios = $this->getItinerariosByIdCapacitacion($idCapacitacion);
        
        $mappedItinerarios = array();
        
        foreach ($itinerarios as $itinerario){
            $tempDia = $this->getDiaById($itinerario['id_dia']);
            $tempJornada = $this->getJornadaById($itinerario['id_jornada']);
            $interesados = $this->getInteresadosByIdItinerario($itinerario['id']);
            
            $itinerario ['dia'] = $tempDia;
            $itinerario['jornada'] = $tempJornada;
            $itinerario['interesados'] = $interesados;
            
            array_push($mappedItinerarios, $itinerario);
        }
        
        return $mappedItinerarios;
    }
}

?>
